package com.lkpstudy.rbac.vo;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author likaiping
 * @editTime 2024/4/19 14:19
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result<T> {
    /**
     * 错误码：success:2000
     */
    private int code;
    /**
     * 错误信息
     */
    private String msg;
    /**
     * 返回数据
     */
    @JsonInclude /* 转换为JSON时默认（无条件）包含该字段 JsonIgnore是无条件忽略 */
    private T data;
    /**
     * 快速构建Result对象
     */
    public static <T> Result<T> build(int code,String msg, T data) {
        return new Result<T>(code,msg,data);
    }

    /**
     * 成功但没有返回结果
     */
    public static <T> Result<T> ok() {
        return build(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(), null);
    }
    /**
     * 成功但有返回结果
     */
    public static <T> Result<T> ok(T data) {
        return build(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(), data);
    }
    /**
     * 成功但有返回结果和信息
     */
    public static <T> Result<T> ok(T data,String msg) {
        return build(ResultCode.SUCCESS.getCode(), msg, data);
    }
    /**
     * 失败
     */
    public static <T> Result<T> error() {
        return build(ResultCode.ERROR.getCode(), ResultCode.ERROR.getMessage(), null);
    }
    /**
     * 失败但没有返回结果
     */
    public static <T> Result<T> error(String msg) {
        return build(ResultCode.ERROR.getCode(), msg, null);
    }
    /**
     * 失败但没有返回结果
     */
    public static <T> Result<T> error(int code, String msg) {
        return build(code, msg, null);
    }
    /**
     * 失败但没有返回结果
     */
    public static <T> Result<T> error(ResultCode resultCode) {
        return build(resultCode.getCode(),resultCode.getMessage() , null);
    }
}
